實務上,一個服務往往可以拆解成數個微服務組成。以市占相當高的 Wordpress 內容管理系統 CMP 為例,其可拆解成 mysql 和 wordpress 。如果你要一個個獨自將這些微服務容器建立起來,著實會花上不少時間,且也易造成重工和遷移不易的問題。Docker Compose 可以方便管理者控制容器間的關係,藉由撰寫設定檔的方式,減少重複的工時且一併將相關的系列參數給寫入。
Dockerfile 定義的是單一映像 ( Image ) 的建立步驟過程;Docker Compose 則定義了藉由映像所組成的容器間的依賴關係、容器的啟動方式和相關參數
Docker Compose 目前的 Repository 是位於 Github 上,可以點選 這邊 前往。由於先前是運用 Linode 租用的 Debian 虛擬主機,所以透過命令列的方式來進行安裝:
# 1. 先確認你是否安裝過 curl
sudo apt update && sudo apt upgrade
sudo apt install curl
# 2. 從官方 Repo 取得最新的 docker compose
curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose # 記得給予權限執行
這是 Docker Compose 的組態 Config 預設檔,看起來會像是這個樣子:
# Wordpress official demo on docs.docker.com
version: "3.9" # docker compose 解析規則版本
services: # 定義專案組成,由 db, wordpress 兩個服務組成。這兩個名稱是自訂的
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment: # 參數可定義在這邊
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
depends_on: # 服務間的依賴性
- db
image: wordpress:latest # 要取用哪個映像檔
volumes:
- wordpress_data:/var/www/html
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
WORDPRESS_DB_NAME: wordpress
volumes: # 別忘記建立 volume,因為你在 db 和 wordpress 間有定義相關的 volumes
db_data: {}
wordpress_data: {}